<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background: red;
            margin: 50px;
        }
    </style>
</head>

<body>
    <div class="box">

    </div>
</body>
<script>
    // try...catch...finally  异常捕获

    // try/catch/finally 语句用于处理代码中可能出现的错误信息。
    // 错误可能是语法错误，通常是程序员造成的编码错误或错别字。也 可能是拼写错误或语言中缺少的功能（可能由于浏览器差异）。


    // JS是单线程,如果脚本(script)中的代码在执行过程中出错, 当前脚本将终止执行,抛出错误信息
    // var a = 10;
    // var b = 20;
    // var c = a + B;
    // console.log(a, b);

    // for (var i = 0; i < 10; i++) {
    //     console.log(i);
    // }


    /*
        如果某些代码执行过程中可能会出错,但又不想影响后续代码执行 => 就可以使用 try/catch/finally(处理代码中可能出现的错误信息)
    语法:
    try{
        尝试执行的代码段(可能会出错的代码)
    }catch(err){  // err 错误对象(包含错误信息)
        catchCode - 捕获错误的代码块(当try中的代码出现错误,会被捕获,在catch中处理)
    }finally{
        finallyCode - 无论 try / catch 结果如何都会执行的代码块      (可选)
    }   
    
    注意： catch 和 finally 语句都是可选的，但你在使用 try 语句时必须至少使用一个。

    提示： 当错误发生时， JavaScript 会停止执行，并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throw 和 try 、 catch一起使用，就可以控制程序输出的错误信息。

    应用:
    (1) 当错误发生时,执行一系列做补救性措施 (IE兼容)
    (2) 捕获代码执行过程中的错误, 不让其影响后续代码的执行


    缺点:try catch 属于同步任务, 只能不过同步代码在执行过程中出现的错误
    
    */

    /* try {
        setTimeout(() => {
            console.log("开始测试");
            var a = 10;
            var b = 20;
            var c = a + B;
            console.log(a, b);
        }, 1000);
    } catch (err) {  // catch捕获到try代码段中的到错误之后,并不会抛出错误, 此时可以对错误进行一系列补救措施
        console.log("错误发生了", err);

        throw err; // 抛出错误 
    } finally {
        console.log("finally中的代码段");
    }

    for (var i = 0; i < 10; i++) {
        console.log(i);
    } */



    setTimeout(() => {
        try {
            console.log("开始测试");
            var a = 10;
            var b = 20;
            var c = a + B;
            console.log(a, b);

        } catch (err) {  // catch捕获到try代码段中的到错误之后,并不会抛出错误, 此时可以对错误进行一系列补救措施
            console.log("错误发生了", err);

            // throw err; // 抛出错误 
        } finally {
            console.log("finally中的代码段");
        }
    }, 1000);

    for (var i = 0; i < 10; i++) {
        console.log(i);
    }







</script>


</html>